package cn.ljh.zard.executor;


import java.util.concurrent.Future;
import java.util.function.Supplier;

/**
 * 基础的执行器
 * 100、判断是否执行
 * 200、执行
 * 201、异步执行
 * 300、判断下一个执行
 * 400、下一个执行
 * 500、。。。
 */
public interface BaseExecutor {


    /**
     * 是否可执行 almost do it
     *
     * @return 当前是否可以执行
     */
    boolean isReadly();


    /**
     * 执行
     *
     * @return 同步返回结果
     */
    <T> T doRun(Supplier supplier);


    /**
     * 异步处理
     *
     * @return 异步返回结果
     */
    <T> Future<T> doAsyncRun(Supplier supplier);




}
